<?php

namespace App\Miya\UIData;


use App\Miya\Models\Area;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\ModelNotFoundException;

class AreaData extends CommonData
{
    protected $name = 'area';
    protected $fields = ['id', 'tag', 'name', 'province_id', 'city_id', 'district_id'];

    /**
     * 使用地区ID查询地区信息
     * @param $id 地区Id
     *
     * @operate 直接调用
     *
     * @data id 地区id
     * @data tag 地区标签
     * @data name 地区名称
     * @data full_name 地区完整名称
     */
    public function get($id): Area
    {
        return $this->dataCache(function () use ($id) {
            $area = Area::select($this->fields)->find($id);
            if (!$area) {
                $msg = sprintf('地区信息中未找到id为 %s 的数据信息', $id);
                throw new ModelNotFoundException($msg);
            }
            return $area;
        }, __METHOD__, $id);
    }

    /**
     * 使用地区Tag查询地区信息
     * @param $tag 地区Tag
     *
     * @operate 直接调用
     *
     * @data id 地区id
     * @data tag 地区标签
     * @data name 地区名称
     * @data full_name 地区完整名称
     */
    public function getByTag($tag): Area
    {
        return $this->dataCache(function () use ($tag) {
            $area = Area::whereTag($tag)->select($this->fields)->first();
            if (!$area) {
                $msg = sprintf('地区信息中未找到tag为 %s 的数据信息', $tag);
                throw new ModelNotFoundException($msg);
            }
            return $area;
        }, __METHOD__, $tag);
    }

    /**
     * 地区信息列表
     * @operate 遍历后调用
     *
     * @data id 地区id
     * @data tag 地区标签
     * @data name 地区名称
     * @data full_name 地区完整名称
     */
    public function list(): Collection
    {
        return $this->dataCache(function () {
            return Area::select($this->fields)->orderBy('rank', 'DESC')->get();
        }, __METHOD__);
    }
}
